Venda de alimentos e bebidas no varejo dos EUA

Gabriel de Jesus Pereira

Descrição da série temporal

  • A série temporal aborda as vendas no varejo dos Estados Unidos de janeiro de 2000 a dezembro de 2019, com 240 observações.

  • O mercado analisado foi o de alimentos e bebidas, pois atende às exigências de sazonalidade e não estacionariedade necessárias para o estudo, além de apresentar padrões claros de aumento de consumo de bebida e alimentos.

Processamento dos dados

data <- readr::read_csv("us-retail-sales.csv") |>
  mutate(
    Date = paste0(Month, "-01") |> 
      as.Date("%Y-%m-%d")
    ) |> 
  select(Date, FoodAndBeverage) |>
  mutate(
    Mês = factor(month(Date, label = TRUE)),
    Ano = year(Date),
  ) |> 
  filter(Ano >= 2000) |> 
  mutate(Ano = factor(Ano)) |> 
  rename(`Alimentos e Bebidas` = FoodAndBeverage)

Identificando padrões

A série temporal

Temp <- data |> 
  plot_time_series(
    Date, 
    `Alimentos e Bebidas`,
    .interactive = TRUE,
    .title = ""
    )

A série temporal

Podemos observar uma tendência de crescimento ao comparar o valor inicial com o valor final. Também é possível notar a tendência de crescimento nas médias móveis centradas.

Análise dos meses

Seas <- data |> 
  ggplot(
    aes(
      x = Mês, 
      y = `Alimentos e Bebidas`, 
      group = Ano,
      color = Ano
      )
    ) +
  geom_line() +
  theme_bw() +
  labs(y = "Alimentos e Bebidas", x = "") +
  scale_color_manual(values = viridis::mako(33))

Análise dos meses

Podemos observar um padrão de comportamento nos diferentes meses ao longo dos anos, com alguns picos de consumo possivelmente associados a datas comemorativas. Por exemplo, podemos ver que próximo de dezembro há um aumento de consumo em todos os anos, podendo ser explicado pelo Dia de Ação de Graças Além disso, observa-se um aumento em setembro, que coincide com a celebração do Dia do Trabalho.

Sazonalidade e estacionariedade

Teste para estacionariedade

Teste.Adf <- data |> 
  pull(`Alimentos e Bebidas`) |>
  adf.test()

Teste.Adf

    Augmented Dickey-Fuller Test

data:  pull(data, `Alimentos e Bebidas`)
Dickey-Fuller = -1.9424, Lag order = 6, p-value = 0.6001
alternative hypothesis: stationary
Teste.Kpss <- data |>
  pull(`Alimentos e Bebidas`) |>
  kpss.test()

Teste.Kpss

    KPSS Test for Level Stationarity

data:  pull(data, `Alimentos e Bebidas`)
KPSS Level = 4.8518, Truncation lag parameter = 4, p-value = 0.01

Teste para estacionariedade

Ao analisar os resultados do teste de Dickey-Fuller (ADF) e o de KPSS, vemos que ao nível de 95% de confiança, não rejeitamos a hipótese nula de não-estacionariedade do teste ADF e rejeitamos a hipótese nula de estacionariedade do teste KPSS. Com p-valor de 0.6 e 0.01 para o teste ADF e KPSS, respectivamente.

Teste para sazonalidade

Teste.Kw <- data |>
  pull(`Alimentos e Bebidas`) |>
  isSeasonal(
    freq = 12, 
    test = "kw"
    )

Teste.Kw
[1] TRUE
Teste.Fried <- data |>
  pull(`Alimentos e Bebidas`) |>
  isSeasonal(
    freq = 12, 
    test = "fried"
    )

Teste.Fried
[1] TRUE

Teste para sazonalidade

Analisando os resultados para a sazonalidade, podemos perceber que, ao nível de 95% de confiança, rejeitamos a hipótese nula de que não há sazonalidade para o teste de Kruskall Wallis e também para o teste de Friedman.

ACF e PACF

ACF_PACF <- data |> 
  plot_acf_diagnostics(
    Date,
    `Alimentos e Bebidas`,
    .interactive = TRUE,
    .lags = 100,
    .title = "", 
    .y_lab = ""
  )

ACF e PACF

Observando os gráficos de ACF e PACF, podemos notar um padrão em que o ACF decresce geometricamente até um ponto em que o lag é não significativo. Além disso, podemos perceber que o PACF é significativo apenas para alguns lags, tornando-se não significativo a partir do lag 9. Dessa forma, isso pode indicar um processo \(AR(8)\).

Código para decomposição clássica e STL

data_ts <- data |> 
  pull(`Alimentos e Bebidas`) |> 
  ts(frequency = 12, 
     start = c(2000, 01), 
     end = c(2019, 12)
     )

Clássica <- data_ts |> 
  decompose() 

STL <- stl(data_ts, s.window = "periodic", robust = TRUE)

Decomposição clássica e STL

Clássica |> 
  autoplot(
    labels = c("Tendência", "Sazonalidade", "Ruído")
    ) +
  labs(title = "") +
  xlab("") +
  theme_bw()

Decomposição clássica e STL

STL |> 
  autoplot(
    labels = c("Tendência", "Sazonalidade", "Ruído")
    ) +
  xlab("") +
  theme_bw()

Decomposição clássica e STL

Pode-se perceber que a decomposição da série exibe uma forte tendência para cima, a qual pode representar boa parte da variação na série. Analisando o ruído branco, podemos ver que as componentes do ruído da série são relativamente pequenas para maior parte da série. No entanto, próximo a 2020, ocorre uma grande queda nos ruídos, chegando abaixo de -3000, possivelmente representando quedas no consumo de alimentos e bebidas.

Referências